package logic

import (
	"bluebell6/dao/redis"
	"bluebell6/models"
	"go.uber.org/zap"
	"strconv"
)

//推荐阅读
//基于用户投票的相关算法:http://www.ruanyifeng.com/blog/algorithm/
//本项目使用简化版的投票分数

/*
投票的几种情况
direction=1时,有两种情况
  1.之前没有投过票,现在套赞成票  -->更新分数和投票记录
   2.之前套反对票,现在改成赞成票  -->更新分数和投票记录
direction=0时,有两种情况
   1.之前套赞成票,现在要取消投票  -->更新分数和投票记录
   2.之前套反对票,现在要取消投票  -->更新分数和投票记录
direction=-1时
   1.之前没有逃过票,现在套反对票   -->更新分数和投票记录
   2.之前跳赞成票,现在改为反对票   -->更新分数和投票记录

投票的限制:
每个帖子自发表之日起一个星期之内允许用户投票,超过一个星期就不允许再投票
   1.到期之后将redis中保存的赞成票及反对票数存储到mysql表中
   2.到期之后删除那个KeyPostVotedZSetPF
*/

// 1.用户投票的数据
// VoteForPost为帖子投票的函数
func VoteForPost(userID int64, p *models.ParamVoteData) error {
	zap.L().Debug("VoteForPost",
		zap.Int64("userID", userID),
		zap.String("postID", p.PostID),
		zap.Int8("direction", p.Direction))
	return redis.VoteForPost(strconv.Itoa(int(userID)), p.PostID, float64(p.Direction))
}
